package com.zrrd.controller;

import com.zrrd.common.page.ManagerPageVo;
import com.zrrd.common.vo.ManagerVo;
import com.zrrd.entity.Manager;
import com.zrrd.service.ManagerService;
import com.zrrd.service.RoleService;
import com.zrrd.common.util.ResponseResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * @author WanJl
 * @version 1.0
 * @title ManagerController
 * @description 管理员用户的控制层接口
 * @create 2024/9/5
 */
@Api(tags = "管理员用户管理接口")
@RestController
@ResponseBody
@RequestMapping("/admin/manager")
public class ManagerController {
    /*
        spring 核心框架包括三大部分：
            IOC 控制反转    IOC容器
            DI  依赖注入
            注入：是把IOC容器里的Bean对象取出来，注入到声明的那个变量中
            依赖：就是在获取IOC容器中某一个Bean对象的时候，顺便把这个对象依赖的其他Bean也取出来

            AOP 面向切面编程

     */
    //@Autowired
    @Resource //自动装配 自动的把IOC容器里存在的那个ManagerService的实现类对象，装配到managerService变量
    ManagerService managerService;

    @Resource
    RoleService roleService;

    /**
     * 分页查询所有
     * @return
     */
    @ApiOperation(value = "分页查询&搜索",notes = "分页查询&搜索详情介绍")
    @GetMapping("/{page}")
    public ResponseResult findByPage(@PathVariable("page") Integer page,
                                   @RequestParam(value = "limit",required = false,defaultValue = "10") Integer limit,
                                   @RequestParam(value = "keyword",required = false) String keyword){
        ManagerPageVo managerPageVo=managerService.findByPage(page,limit,keyword);
        return ResponseResult.queryResponse(managerPageVo);
    }

    /**
     * 新增
     * @param manager
     * @return
     */
    @PostMapping()
    public ResponseResult add(@RequestBody Manager manager){    //如果参数是某个实体类，那么注意在参数类型前加@RequestBody注解
        return ResponseResult.saveResponse(managerService.save(manager));  //新增，把对象里的属性，新增到MySQL数据库
    }

    /**
     * 修改
     * @param manager
     * @return
     */
    @PutMapping
    public ResponseResult update(@RequestBody Manager manager){
        return ResponseResult.updateResponse(managerService.updateById(manager)); //修改，根据id修改数据库的内容
    }

    /**
     * 删除
     * @param id
     * @return
     */
    @DeleteMapping("/{id}/delete")
    public ResponseResult delete(@PathVariable("id") Integer id){ //如果参数类型不是实体类，而是其他如整数等类型，那么添加@PathVariable 注解
        return ResponseResult.deleteResponse(managerService.removeById(id)); //删除，根据id删除数据库的数据
    }

    //根据id查询
    @GetMapping("/{id}/one")
    public ResponseResult findById(@PathVariable Integer id){
        Manager manager = managerService.getById(id);
        ManagerVo managerVo=new ManagerVo();
        BeanUtils.copyProperties(manager, managerVo);
        managerVo.setRole(roleService.getById(manager.getRoleId()));
        return ResponseResult.queryResponse(managerVo);
    }

    //修改状态
    @PutMapping("/{id}/updateStatus")
    public ResponseResult updateStatus(@PathVariable("id")Integer id,@RequestBody Manager manager){
        boolean flag = managerService.lambdaUpdate()
                .eq(Manager::getId, id)
                .set(Manager::getStatus, manager.getStatus())
                .update();

        return ResponseResult.updateResponse(flag);
    }


}
